/**
 * 会议室管理模块配置文件
 * 该文件定义了会议室管理模块的相关配置，包括模块名称、API 路径、会议室接口定义、表格列配置、检索配置和添加配置。
 * @module meetingRoomsConfig
 */
export const moduleName = '住宿场所'
export const moduleApi = '/api/hotelManagement'

// 模块字段
// Place:
// {"id": 0, // ID
//       "name": "string", // 名称
//       "longitude": "string", // 经度
//       "latitude": "string", // 纬度
//       "mapImg": "string", // 地图图片
//       "address": "string", // 地址
//       "surround": "string", // 围栏
//       "peopleNumber": 0, // 可容纳人数
//       "linkmanName": "string", // 联系人姓名
//       "linkmanPhone": "string", // 联系人电话
//       "equipment": "string", // 设备
//       "remark": "string" // 备注
// }

export interface Place {
  id: number // ID
  name: string // 名称
  longitude: string // 经度
  latitude: string // 纬度
  mapImg: string // 地图图片
  address: string // 地址
  surround: string // 围栏
  peopleNumber: number // 可容纳人数
  linkmanName: string // 联系人姓名
  linkmanPhone: string // 联系人电话
  equipment: string // 设备
  remark: string // 备注
  createdAt?: string // 创建时间
  updatedAt?: string // 修改时间
}
const mockData: Place[] = []

/**
 * 表格列配置
 * @param {string} label - 列的标题
 * @param {string} prop - 对应的数据字段
 * @param {string} component - 使用的组件类型 (input, select, date, imgUpload, dateRange, timeRange)
 * @param {string} minWidth - 最小宽度（可选）
 * @param {string} component - 业务组件
 * @param {string} outOfLine - 是否外部组件（是否在 table 局部组件内，弹窗无法在局部组件内）
 * @param {string} minWidth - 最小宽度（可选）
 */
const tableColumns = ref([
  { label: '名称', prop: 'name', minWidth: '150px' },
  { label: '地址', prop: 'address', minWidth: '200px' },
  {
    label: '围栏',
    prop: 'surround',
    minWidth: '150px',
    customRender: true,
  },
  { label: '可容纳人数', prop: 'peopleNumber', minWidth: '120px' },
  { label: '联系人姓名', prop: 'linkmanName', minWidth: '150px' },
  { label: '联系人电话', prop: 'linkmanPhone', minWidth: '150px' },
  { label: '设备', prop: 'equipment', minWidth: '150px' },
  { label: '备注', prop: 'remark', minWidth: '200px' },
  { label: '创建时间', prop: 'createdAt', minWidth: null },
  { label: '修改时间', prop: 'updatedAt', minWidth: null },
  {
    label: '操作',
    prop: 'operations',
    width: '160px',
    fixed: 'right',
  },
])
/**
 * 获取检索配置参数
 * 返回的对象包含以下属性:
 * @param {string} label - 检索项的标题
 * @param {string} prop - 对应的数据字段
 * @param {string} component - 使用的组件类型 (input, select, date, imgUpload, dateRange, timeRange)
 * @param {string} placeholder - 输入框的占位符（可选）
 */
const searchParams = () => [
  {
    label: '名称',
    prop: 'name',
    component: 'input',
    placeholder: '请输入名称',
    colSpan: 6,
  },
  {
    label: '地址',
    prop: 'address',
    component: 'input',
    placeholder: '请输入地址',
    colSpan: 6,
  },
  {
    label: '联系人姓名',
    prop: 'linkmanName',
    component: 'input',
    placeholder: '请输入联系人姓名',
    colSpan: 6,
  },
]
/**
 * 获取添加参数
 * @param {string} label - 添加项的标题
 * @param {string} prop - 对应的数据字段
 * @param {string} required - 是否必填
 * @param {object} rule - 校验规则（可选），若不为 null，则表示该字段需要进行校验
 * @param {function} validator - 校验函数，若校验规则采用自动形式，需要通过validator传入校验函数
 * @param {number} colSpan - 列的跨度（可选）
 * @param {string} component - 使用的组件类型 ('input' | 'input-number' | 'select' | 'switch' | 'textarea' | 'date-picker' | 'time-picker' | 'time-picker' | 'img-upload')
 * @param {string} placeholder - 输入框的占位符（可选）
 */
const addParams = ref([
  {
    label: '场所名称',
    prop: 'name',
    component: 'input',
    placeholder: '请输入场所名称',
    required: true,
    colSpan: 12,
    rules: [{ required: true, message: '请输入场所名称', trigger: 'blur' }],
  },
  {
    label: '地址',
    prop: 'address',
    component: 'input',
    placeholder: '请输入地址',
    required: true,
    colSpan: 12,
    rules: [{ required: true, message: '请输入地址', trigger: 'blur' }],
  },
  {
    label: '可容纳人数',
    prop: 'peopleNumber',
    component: 'input-number',
    placeholder: '请输入可容纳人数',
    required: true,
    colSpan: 12,
    rules: [{ required: true, message: '请输入可容纳人数', trigger: 'blur' }],
    componentProps: {
      min: 1,
      controls: true,
    },
  },
  {
    label: '联系人姓名',
    prop: 'linkmanName',
    component: 'input',
    placeholder: '请输入联系人姓名',
    required: true,
    colSpan: 12,
    rules: [{ required: true, message: '请输入联系人姓名', trigger: 'blur' }],
  },
  {
    label: '联系人电话',
    prop: 'linkmanPhone',
    component: 'input',
    placeholder: '请输入联系人电话',
    required: true,
    colSpan: 12,
    rules: [
      { required: true, message: '请输入联系人电话', trigger: 'blur' },
      { pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号码', trigger: 'blur' },
    ],
  },
  {
    label: '设备',
    prop: 'equipment',
    component: 'input',
    placeholder: '请输入设备',
    colSpan: 12,
  },
  {
    label: '备注',
    prop: 'remark',
    component: 'textarea',
    placeholder: '请输入备注',
    colSpan: 24,
    componentProps: {
      rows: 4,
    },
  },
])

export { addParams, mockData, searchParams, tableColumns }
